package com.cty.server;

import java.io.IOException;
import java.io.InputStream;
import java.net.ServerSocket;
import java.net.Socket;

/**
 * @Auther: cty
 * @Date: 2020/1/24 13:59
 * @Description:  使用ServerSocket建立与浏览器的连接，获取请求消息
 * 1 Http概念？
 * Http(HyperText Transfer Protocol) 超文本传输协议
 * 互联网上应用最为广泛的一种网络协议，所有的WWW文件都必须遵守这个标准。
 * [HTTP协议的六种请求方法](https://www.cnblogs.com/phpper/p/9127553.html)
 * 2 用户在浏览器如何向服务器发起请求（浏览器请求消息格式）？
 * 有六种请求方法，最常用的请求方法是GET和POST
 * （1）GET
 *      * 请求行：GET URI?请求正文 协议/版本
 *      * 请求头（浏览器封装好的信息，不用关心）
 * （2）POST
 *      * 请求行：POST URI 协议/版本
 *      * 请求头（浏览器封装好的信息，不用关心）
 *
 *      * 请求正文
 * 3 服务器接收请求后如和向用户浏览器响应（服务器响应消息格式）？
 *      * 相应行（状态行）：协议/版本 状态码 状态码描述
 *      * 响应头：
 *      * 响应正文
 *
 * @version: 1.0
 */
public class Test01Server {
    private ServerSocket serverSocket ;
    public static void main(String[] args) {
        Test01Server server = new Test01Server();
        server.start();
    }
    //启动服务
    public void start() {
        try {
            serverSocket =  new ServerSocket(8888);  //建立服务器
            receive();
        } catch (IOException e) {
            e.printStackTrace();
            System.out.println("服务器启动失败....");
        }
    }
    //接受连接处理
    public void receive() {
        try {
            System.out.println("服务器等待与客户端建立连接....");
            Socket client = serverSocket.accept();  //阻塞式等待连接
            System.out.println("一个客户端建立了连接....");
            //获取请求协议
            InputStream is =client.getInputStream();
            byte[] datas = new byte[1024*1024];
            int len = is.read(datas);
            String requestInfo = new String(datas,0,len);
            System.out.println(requestInfo);
        } catch (IOException e) {
            e.printStackTrace();
            System.out.println("客户端错误");
        }
    }
    //停止服务
    public void stop() {

    }
}

//res: post请求
//一个客户端建立了连接....
//POST /index.html HTTP/1.1
//Host: localhost:8888
//User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:72.0) Gecko/20100101 Firefox/72.0
//Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
//Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2
//Accept-Encoding: gzip, deflate
//Content-Type: application/x-www-form-urlencoded
//Content-Length: 20
//Origin: http://localhost:63342
//Connection: keep-alive
//Referer: http://localhost:63342/webserver/login.html?_ijt=d79rhkh4l2ue8nuc1866vh45jp
//Cookie: Idea-c0e65154=9d2226d0-e5b6-4bd3-bd1a-a1c2e6b90d31; hibext_instdsigdipv2=1
//Upgrade-Insecure-Requests: 1
//
//uname=cty&pwd=123456

//res: get请求
//一个客户端建立了连接....
//GET /index.html?uname=cty&pwd=123456 HTTP/1.1
//Host: localhost:8888
//User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:72.0) Gecko/20100101 Firefox/72.0
//Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
//Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2
//Accept-Encoding: gzip, deflate
//Connection: keep-alive
//Referer: http://localhost:63342/webserver/login.html?_ijt=unq9e5i0jj6ne5fakr5ld99gia
//Cookie: Idea-c0e65154=9d2226d0-e5b6-4bd3-bd1a-a1c2e6b90d31; hibext_instdsigdipv2=1
//Upgrade-Insecure-Requests: 1